package cn.dgiot.fd.service;

import com.aliyuncs.iot.model.v20180120.BatchCheckDeviceNamesResponse;
import com.aliyuncs.iot.model.v20180120.BatchQueryDeviceDetailResponse;
import com.aliyuncs.iot.model.v20180120.BatchRegisterDeviceWithApplyIdResponse;
import com.aliyuncs.iot.model.v20180120.DeleteDeviceResponse;
import com.aliyuncs.iot.model.v20180120.DisableThingResponse;
import com.aliyuncs.iot.model.v20180120.EnableThingResponse;
import com.aliyuncs.iot.model.v20180120.InvokeThingServiceResponse;
import com.aliyuncs.iot.model.v20180120.InvokeThingsServiceResponse;
import com.aliyuncs.iot.model.v20180120.QueryBatchRegisterDeviceStatusResponse;
import com.aliyuncs.iot.model.v20180120.QueryDeviceDesiredPropertyResponse;
import com.aliyuncs.iot.model.v20180120.QueryDeviceDetailResponse;
import com.aliyuncs.iot.model.v20180120.QueryDevicePropertyStatusResponse;
import com.aliyuncs.iot.model.v20180120.QueryDeviceResponse;
import com.aliyuncs.iot.model.v20180120.RegisterDeviceResponse;
import com.aliyuncs.iot.model.v20180120.ResetThingResponse;
import com.aliyuncs.iot.model.v20180120.SetDeviceDesiredPropertyResponse;
import com.aliyuncs.iot.model.v20180120.SetDevicePropertyResponse;

import cn.dgiot.fd.model.DeviceModel;
import cn.dgiot.fd.model.PropertiesSetModel;

/**
 * 设备管理
 * @author
 *
 */
public interface IDeviceService {
	
	/**
	 *  设备注册
	 */
	RegisterDeviceResponse registerDevice(DeviceModel deviceModel);
	
	/**
	 * 查询设备详情
	 */
	QueryDeviceDetailResponse queryDeviceDetail(DeviceModel deviceModel);
	
	/**
	 * 批量查询设备详情
	 */
	BatchQueryDeviceDetailResponse batchQueryDeviceDetail(DeviceModel deviceModel);
	
	/**
	 * [调用该接口根据申请批次ID（ApplyId）批量注册设备]
	 * @param deviceModel
	 * @return
	 */
	BatchRegisterDeviceWithApplyIdResponse batchRegisterDeviceWithApplyId(DeviceModel deviceModel);
	
	/**
	 * [调用该接口在指定产品下批量自定义设备名称]
	 * @param deviceModel
	 * @return
	 */
	BatchCheckDeviceNamesResponse batchCheckDeviceNames(DeviceModel deviceModel);
	
	/**
	 * [调用该接口查询批量注册设备申请的处理状态和结果]
	 * @param deviceModel
	 * @return
	 */
	QueryBatchRegisterDeviceStatusResponse queryBatchRegisterDeviceStatus(DeviceModel deviceModel);

	/**
	 * 查询设备列表
	 */
	QueryDeviceResponse queryDevice(DeviceModel deviceModel);
//	
//	/**
//	 * 获取设备状态
//	 */
//	void getDeviceStatus();
//	
//	/**
//	 * 接口批量查看同一产品下指定设备的运行状态
//	 */
//	void batchGetDeviceState();
//	
	/**
	 * 禁用指定设备
	 */
	DisableThingResponse disableThing(DeviceModel deviceModel);
	
	/**
	 * 禁用指定设备
	 */
	ResetThingResponse resetThing(DeviceModel deviceModel);
//	
//	
	/**
	 * 启用设备
	 */
	EnableThingResponse enableThing(DeviceModel deviceModel);
//	
//	
	
	/**
	 * 修改设备
	 */
	RegisterDeviceResponse updateDevice(DeviceModel deviceModel);
	
	/**
	 * 删除设备
	 */
	DeleteDeviceResponse deleteDevice(DeviceModel deviceModel);
	
	/**
	 * [设备设置属性值（异步）]
	 * @param deviceModel
	 * @return
	 */
	SetDevicePropertyResponse setDeviceProperty(PropertiesSetModel propertiesSetModel);
	
	/**
	 * [批量设备设置属性值（异步）]
	 * @param deviceModel
	 * @return
	 */
	SetDevicePropertyResponse setDevicesProperty(PropertiesSetModel propertiesSetModel);
	
	
	/**
	 * [设备调用指定服务（同步）]
	 * @param deviceModel
	 * @return
	 */
	InvokeThingServiceResponse invokeThingService(DeviceModel deviceModel);
	
	/**
	 * [设备调用指定服务（批量、同步）]
	 * @param deviceModel
	 * @return
	 */
	InvokeThingsServiceResponse invokeThingsService(DeviceModel deviceModel);
	
	/**
	 * [修改设备的期望属性值]
	 * @param deviceModel
	 * @return
	 */
	SetDeviceDesiredPropertyResponse setDeviceDesiredProperty(DeviceModel deviceModel);
	
	/**
	 * [查询指定设备的期望属性值]
	 * @param deviceModel
	 * @return
	 */
	QueryDeviceDesiredPropertyResponse queryDeviceDesiredProperty(DeviceModel deviceModel);
	
	/**
	 * [查询指定设备属性快照]
	 * @param deviceModel
	 * @return
	 */
	QueryDevicePropertyStatusResponse queryDevicePropertyStatus(DeviceModel deviceModel);
//	/**
//	 * 删除设备
//	 */
//	void deleteDevice();
//	
//	
//	/**
//	 * 删除设备
//	 */
//	void deleteDevice();
}
